package com.cnzhy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.ThreadPoolExecutor;

/**
 * @Author: zhaoyan5
 */
@RestController //该注解是@Controller和@ResponseBody的合集, 并且是将函数的返回值直接填入HTTP响应体中, 是REST风格的控制器
public class StarterTestController {

    /**
     * 不推荐字段注入 :
     *
     * 依赖注入与容器本身耦合
     * 依赖注入框架的核心思想之一就是受容器管理的类不应该去依赖容器所使用的依赖。换句话说，这个类应该是一个简单的POJO(Plain Ordinary Java Object)能够被单独实例化并且你也能为它提供它所需的依赖。
     * 这个问题具体可以表现在：
     *
     * 你的类和依赖容器强耦合，不能在容器外使用
     * 你的类不能绕过反射（例如单元测试的时候）进行实例化，必须通过依赖容器才能实例化，这更像是集成测试
     */
    private ThreadPoolExecutor threadPoolExecutor;

    /**
     * 强制依赖就用构造器方式
     * 可选、可变的依赖就用setter 注入
     */
    @Autowired
    public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) {
        this.threadPoolExecutor = threadPoolExecutor;
    }

    /**
     *  测试URL: http://localhost:8080/getCorePoolSize
     */
    @GetMapping("getCorePoolSize")
    public int getCorePoolSize() {
        return threadPoolExecutor.getCorePoolSize();
    }

}
